// 基本实现思路如下：
// input 读取到 文件 ，使用 FileReader 将其转换为 base64 编码
// 新建 img ，使其 src 指向刚刚的 base64
// 新建 canvas ，将 img 画到 canvas 上
// 利用 canvas.toDataURL/toBlob 将 canvas 导出为 base64 或 Blob
// 将 base64 或 Blob 转化为 File

class CompressImg {
    constructor(options) {
        this.fileReader = new FileReader();
        this.options = options;
        this.createBase64();
    }

    createBase64() {
        this.fileReader.readAsDataURL(this.options.file);
        this.fileReader.onload = (e) => {
            this.compress(e.target.result);
        };
    }

    compress(base64) {
        const canvas = document.createElement("canvas");
        const ctx = canvas.getContext("2d");
        const img = new Image();
        img.src = base64;
        img.onload = () => {
            canvas.width = img.width;
            canvas.height = img.height;
            ctx.drawImage(img, 0, 0, img.width, img.height);
            const compressedBase64 = canvas.toDataURL(this.options.file.type, this.options.quality);
            this.options.success?.(compressedBase64);
        };
    }
}

export default CompressImg;